package com.alibaba.middleware.hsf.guide.server.normal;

import com.alibaba.middleware.hsf.guide.api.common.StopGuard;

import com.taobao.hsf.app.api.util.HSFApiProviderBean;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Date;

/**
 * <pre>
 *     发布一个普通的HSF服务
 * </pre>
 *
 *
 * @author weipeng2k 2015年9月23日 下午7:56:33
 */
public class Start {
    public static void main(String[] args) {
        // 设置project.name，方便在ops系统中查到对应的应用名
        System.setProperty("project.name", "HSF-Guide-Server-Normal");
        System.out.println("HSF-Guide-Server-Normal begin start @ " + new Date());

        // 启动Spring容器,获取OrderService这个Bean
        ClassPathXmlApplicationContext application = new ClassPathXmlApplicationContext(
                "classpath:dao.xml", "classpath:datasource.xml", "classpath:biz.xml");
        application.start();
        application.registerShutdownHook();
        Object target = application.getBean("orderService");

        // ---------------------- 装配 -----------------------//
        // [设置] HSF服务发布逻辑
        HSFApiProviderBean hsfApiProviderBean = new HSFApiProviderBean();
        // [设置] 发布服务的接口
        hsfApiProviderBean.setServiceInterface("com.alibaba.middleware.hsf.guide.api.service.OrderService");
        // [设置] 服务的实现对象
        hsfApiProviderBean.setTarget(target);
        // [设置] 服务的版本
        hsfApiProviderBean.setServiceVersion("1.0.0");
        // [设置] 服务的归组
        hsfApiProviderBean.setServiceGroup("HSF");
        // [设置] 服务的响应时间
        hsfApiProviderBean.setClientTimeout(3000);
        // [设置] 服务传输业务对象时的序列化类型
        hsfApiProviderBean.setPreferSerializeType("hessian2");

        // ---------------------- 发布 -----------------------//
        // [发布] HSF服务
        try {
            hsfApiProviderBean.init();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        System.out.println("HSF-Guide-Server-Normal started @ " + new Date());

        StopGuard.guard();

        // ---------------------- 停止 -----------------------//
        // [停止] HSF服务
        try {
            hsfApiProviderBean.shutdownHSFServer();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        application.close();
    }
}
